package com.jtlrm.ckd.app;


import android.content.Context;
import android.content.Intent;
import android.support.multidex.MultiDex;
import android.util.Log;

import com.alibaba.android.arouter.launcher.ARouter;
import com.base.sdk.util.log.LogUtil;
import com.hyphenate.chatuidemo.HuanXinApplication;
import com.jtlrm.ckd.mvp.view.service.PreLoadX5Service;
import com.squareup.leakcanary.LeakCanary;
import com.squareup.leakcanary.RefWatcher;
import com.jtlrm.ckd.net.RetrofitUtil;
import com.jtlrm.ckd.util.EventBusUtil;
import com.tencent.bugly.crashreport.CrashReport;
import com.tencent.smtt.export.external.TbsCoreSettings;
import com.tencent.smtt.sdk.QbSdk;

import java.util.HashMap;


/**
 * date:    2017/9/13
 * description: 全局初始化操作
 */

public class MyApplication extends HuanXinApplication {
    private RefWatcher refWatcher;
    public static final boolean isDebug = false;

    @Override
    public void onCreate() {
        super.onCreate();
        initRouter();
        RetrofitUtil.init(this);//初始化retrofit
        LogUtil.init(isDebug);//初始化Log打印，true表示显示打印，false表示不显示打印
        EventBusUtil.openIndex();
        if (LeakCanary.isInAnalyzerProcess(this)) return;
        refWatcher = LeakCanary.install(this);
        // initJpush();
        // bugly start// 发布时候设置成false
        CrashReport.initCrashReport(getApplicationContext(), "be9cedcad1", isDebug);
        // bugly end
        initX5();
    }

    private void initX5() {
        //搜集本地tbs内核信息并上报服务器，服务器返回结果决定使用哪个内核。
//        QbSdk.PreInitCallback cb = new QbSdk.PreInitCallback() {
//
//            @Override
//            public void onViewInitFinished(boolean arg0) {
//                // TODO Auto-generated method stub
//                //x5內核初始化完成的回调，为true表示x5内核加载成功，否则表示x5内核加载失败，会自动切换到系统内核。
//                Log.d("app", " onViewInitFinished is " + arg0);
//            }
//
//            @Override
//            public void onCoreInitFinished() {
//                // TODO Auto-generated method stub
//            }
//        };
//        //x5内核初始化接口
//        QbSdk.initX5Environment(getApplicationContext(),  cb);
        HashMap<String, Object> map = new HashMap<String, Object>();
        map.put(TbsCoreSettings.TBS_SETTINGS_USE_SPEEDY_CLASSLOADER, true);
        QbSdk.initTbsSettings(map);
        Intent intent = new Intent(this, PreLoadX5Service.class);
        startService(intent);
    }

    /**
     * 初始化路由器
     */
    private void initRouter() {
        if (isDebug) {           // 这两行必须写在init之前，否则这些配置在init过程中将无效
            ARouter.openLog();     // 打印日志
            ARouter.openDebug();   // 开启调试模式(如果在InstantRun模式下运行，必须开启调试模式！线上版本需要关闭,否则有安全风险)
        }
        ARouter.init(this); // 尽可能早，推荐在Application中初始化
    }

    /**
     * 初始化极光推送
     */
    private void initJpush() {
//        JPushInterface.setDebugMode(true);    // 设置开启日志,发布时请关闭日志
//        JPushInterface.init(this);            // 初始化 JPush
//        // 指定定制的 Notification Layout
//        CustomPushNotificationBuilder builder = new
//                CustomPushNotificationBuilder(this,
//                R.layout.notification_layout,
//                R.id.icon,
//                R.id.title,
//                R.id.text);
//        // 指定最顶层状态栏小图标
//        builder.statusBarDrawable = R.mipmap.logo_small;
//        // 指定下拉状态栏时显示的通知图标
//        builder.layoutIconDrawable = R.mipmap.ic_launcher;
//        JPushInterface.setDefaultPushNotificationBuilder(builder);
    }

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }

    private RefWatcher setupLeakCanary() {
        if (LeakCanary.isInAnalyzerProcess(this)) {
            return RefWatcher.DISABLED;
        }
        return LeakCanary.install(this);
    }

    public static RefWatcher getRefWatcher(Context context) {
        MyApplication application = (MyApplication) context.getApplicationContext();
        return application.refWatcher;
    }


}
